package com.keensense.vcm.model;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import com.keensense.vcm.model.enums.IntelligentStatusEnum;
import com.keensense.vcm.model.enums.SortEnum;

/**
 * @author lanjian
 * @date 2020/5/7 11:39 上午
 */
@XmlRootElement(name = "request")
public class GetIntelligentAnalysisListRequest {

    private GetIntelligentAnalysisListRequest() {}

    public GetIntelligentAnalysisListRequest(Page page) {
        this.page = page;
    }

    /**
     * 视频类型 0.实时 1.录像 2.导入视频 3 历史车辆图片
     */
    @XmlElement
    private Integer videoType;

    /**
     * 智能分析类型 0: 行为分析(历史行为分析暂不支持) 1: 车牌分析(CPU车牌识别+GPU深度识别(可选)) 2:人脸分析 3: 摘要分析(只支持历史文件摘要) 4: 以图搜图分析(人体识别)) 5：视频索引 7：
     * 高级以图搜图(人脸识别+人体识别)(废弃) 8： 高级车牌分析(GPU车牌识别+GPU深度识别(可选)) 9： 人车混合结构化(人体识别+GPU车辆识别+机非人混合算法) 10历史车辆图片二次分析
     */
    @XmlElement
    private Integer intelligentType;

    /**
     * 任务名称
     */
    @XmlElement
    private String taskName;

    /**
     * 创建用户
     */
    @XmlElement
    private String createUser;

    /**
     * 创建时间，时间戳
     */
    @XmlElement
    private Long createTimeStart;

    /**
     * 结束时间，时间戳
     */
    @XmlElement
    private Long createTimeEnd;

    /**
     * 摄像机编码，多个由逗号分割，由获取摄像机列表（过时）接口获取。 数量限制：100
     */
    @XmlElement
    private String cameraId;

    /**
     * 文件编码，多个由逗号分割，由图像信息库资料搜索（过时）接口获取 数量限制：100
     */
    @XmlElement
    private String fileId;

    /**
     * 智能分析状态 -3.摄像机被删除 -2.已经被停止 -1.已经失败 0.未执行 1.分析中 2.已成功 3.采集中 4.启动中 5.停止中 6.排队中
     */
    @XmlElement
    private IntelligentStatusEnum intelligentStatus;

    /**
     * 创建智能分析任务系统返回的任务编码列表，多个由逗号分割
     */
    @XmlElement
    private String taskId;

    /**
     * 分页信息
     */
    @XmlElement
    private Page page;

    /**
     * 任务创建的域的域编码，可指定任务创建的域进行任务查询。 具体参数类型参见createDomainCodes
     */
    @XmlElementWrapper(name = "createDomainCodes")
    @XmlElement(name = "createDomainCode")
    private List<String> createDomainCodes;

    /**
     * 任务执行域的域编码，可指定执行的域进行任务查询。 具体参数类型参见executeDomainCodes
     */
    @XmlElementWrapper(name = "executeDomainCodes")
    @XmlElement(name = "executeDomainCode")
    private List<String> executeDomainCodes;

    public void setVideoType(Integer videoType) {
        this.videoType = videoType;
    }

    public void setIntelligentType(Integer intelligentType) {
        this.intelligentType = intelligentType;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }

    public void setCreateTimeStart(Long createTimeStart) {
        this.createTimeStart = createTimeStart;
    }

    public void setCreateTimeEnd(Long createTimeEnd) {
        this.createTimeEnd = createTimeEnd;
    }

    public void setCameraId(String cameraId) {
        this.cameraId = cameraId;
    }

    public void setFileId(String fileId) {
        this.fileId = fileId;
    }

    public void setIntelligentStatus(IntelligentStatusEnum intelligentStatus) {
        this.intelligentStatus = intelligentStatus;
    }

    public void setTaskId(String taskId) {
        this.taskId = taskId;
    }

    public void setCreateDomainCodes(List<String> createDomainCodes) {
        this.createDomainCodes = createDomainCodes;
    }

    public void setExecuteDomainCodes(List<String> executeDomainCodes) {
        this.executeDomainCodes = executeDomainCodes;
    }

    public static class Page {

        public Page(Integer no, Integer pageSize, SortEnum pageSort, SortNameEnum sortName) {
            this.no = no;
            this.pageSize = pageSize;
            this.pageSort = pageSort;
            this.sortName = sortName;
        }

        /**
         * 当前页正整数
         */
        @XmlAttribute
        private Integer no;
        /**
         * M Attribute 每页总数,[1,1000]
         */
        @XmlAttribute
        private Integer pageSize;
        /**
         * M Attribute 排序方式，desc(降序)，asc(升序)
         */
        @XmlAttribute
        private SortEnum pageSort;

        /**
         * M Attribute 排序名称，createDate(创建时间)，taskStatus(任务状态)，taskName（任务名称）
         */
        @XmlAttribute
        private SortNameEnum sortName;
    }

    public enum SortNameEnum {
        createDate, taskStatus, taskName;
    }

}
